Manticore 支持范围很广的语言,大多数语言默认启用 charset_table = non_cont 即可获得基础支持(这也是默认值)。也可以使用 non_cjk 这个别名,它等同于 non_cont:charset_table = non_cjk。
对于许多语言,Manticore 提供了 stopwords 文件,可用于提升搜索相关性。
此外,少数语言还支持高级形态学处理;通过基于词典的词形还原或词干提取算法来改善分词和规范化,可以显著提升搜索相关性。
下表列出了所有受支持的语言以及启用方式:
- 基础支持(“Supported” 列)
- stopwords(“Stopwords file name” 列)
- 高级形态学处理(“Advanced morphology” 列)
| 语言 |
支持情况 |
stopwords 文件名 |
高级形态学处理 |
备注 |
| 南非荷兰语 |
charset_table=non_cont |
af |
- |
|
| 阿拉伯语 |
charset_table=non_cont |
ar |
morphology=stem_ar(阿拉伯语词干提取器);morphology=libstemmer_ar |
|
| 亚美尼亚语 |
charset_table=non_cont |
hy |
- |
|
| 阿萨姆语 |
需要手动指定 charset_table |
- |
- |
|
| 巴斯克语 |
charset_table=non_cont |
eu |
- |
|
| 孟加拉语 |
charset_table=non_cont |
bn |
- |
|
| Bishnupriya |
需要手动指定 charset_table |
- |
- |
|
| Buhid |
需要手动指定 charset_table |
- |
- |
|
| 保加利亚语 |
charset_table=non_cont |
bg |
- |
|
| 加泰罗尼亚语 |
charset_table=non_cont |
ca |
morphology=libstemmer_ca |
|
| 使用 ICU 的中文 |
charset_table=chinese |
zh |
morphology=icu_chinese |
比使用 ngram 更准确 |
| 使用 Jieba 的中文 |
charset_table=chinese |
zh |
morphology=jieba_chinese,需要安装 manticore-language-packs 包 |
比使用 ngram 更准确 |
| 使用 ngram 的中文 |
ngram_chars=chinese |
zh |
ngram_chars=1 |
索引更快,但搜索性能可能不如前者 |
| 克罗地亚语 |
charset_table=non_cont |
hr |
- |
|
| 库尔德语 |
charset_table=non_cont |
ckb |
- |
|
| 捷克语 |
charset_table=non_cont |
cz |
morphology=stem_cz(捷克语词干提取器) |
|
| 丹麦语 |
charset_table=non_cont |
da |
morphology=libstemmer_da |
|
| 荷兰语 |
charset_table=non_cont |
nl |
morphology=libstemmer_nl |
|
| 英语 |
charset_table=non_cont |
en |
morphology=lemmatize_en(单一词根形式);morphology=lemmatize_en_all(所有词根形式);morphology=stem_en(Porter 英语词干提取器);morphology=stem_enru(Porter 英语和俄语词干提取器);morphology=libstemmer_en(来自 libstemmer 的英语) |
|
| 世界语 |
charset_table=non_cont |
eo |
- |
|
| 爱沙尼亚语 |
charset_table=non_cont |
et |
- |
|
| 芬兰语 |
charset_table=non_cont |
fi |
morphology=libstemmer_fi |
|
| 法语 |
charset_table=non_cont |
fr |
morphology=libstemmer_fr |
|
| 加利西亚语 |
charset_table=non_cont |
gl |
- |
|
| Garo |
需要手动指定 charset_table |
- |
- |
|
| 德语 |
charset_table=non_cont |
de |
morphology=lemmatize_de(单一词根形式);morphology=lemmatize_de_all(所有词根形式);morphology=lemmatize_de_v2(带 sharp-s 规范化的单一词根形式);morphology=lemmatize_de_v2_all(带 sharp-s 规范化的所有词根形式);morphology=libstemmer_de |
使用 AOT v2 变体时,请将 charset_table 设为 non_cont,german |
| 希腊语 |
charset_table=non_cont |
el |
morphology=libstemmer_el |
|
| 希伯来语 |
charset_table=non_cont |
he |
- |
|
| 印地语 |
charset_table=non_cont |
hi |
morphology=libstemmer_hi |
|
| 苗语 |
需要手动指定 charset_table |
- |
- |
|
| Ho 语 |
需要手动指定 charset_table |
- |
- |
|
| 匈牙利语 |
charset_table=non_cont |
hu |
morphology=libstemmer_hu |
|
| 印度尼西亚语 |
charset_table=non_cont |
id |
morphology=libstemmer_id |
|
| 爱尔兰语 |
charset_table=non_cont |
ga |
morphology=libstemmer_ga |
|
| 意大利语 |
charset_table=non_cont |
it |
morphology=libstemmer_it |
|
| 日语 |
ngram_chars=japanese |
- |
ngram_chars=japanese ngram_len=1 |
需要基于 ngram 的分词 |
| 科米语 |
需要手动指定 charset_table |
- |
- |
|
| 韩语 |
ngram_chars=korean |
- |
ngram_chars=korean ngram_len=1 |
需要基于 ngram 的分词 |
| Large Flowery Miao |
需要手动指定 charset_table |
- |
- |
|
| 拉丁语 |
charset_table=non_cont |
la |
- |
|
| 拉脱维亚语 |
charset_table=non_cont |
lv |
- |
|
| 立陶宛语 |
charset_table=non_cont |
lt |
morphology=libstemmer_lt |
|
| Maba |
需要手动指定 charset_table |
- |
- |
|
| Maithili |
需要手动指定 charset_table |
- |
- |
|
| 马拉地语 |
需要手动指定 charset_table |
- |
- |
|
| 马拉地语 |
charset_table=non_cont |
mr |
- |
|
| Mende |
需要手动指定 charset_table |
- |
- |
|
| Mru |
需要手动指定 charset_table |
- |
- |
|
| Myene |
需要手动指定 charset_table |
- |
- |
|
| 尼泊尔语 |
需要手动指定 charset_table |
- |
morphology=libstemmer_ne |
|
| Ngambay |
需要手动指定 charset_table |
- |
- |
|
| 挪威语 |
charset_table=non_cont |
no |
morphology=libstemmer_no |
|
| 奥里亚语 |
需要手动指定 charset_table |
- |
- |
|
| 波斯语 |
charset_table=non_cont |
fa |
- |
|
| 波兰语 |
charset_table=non_cont |
pl |
- |
|
| 葡萄牙语 |
charset_table=non_cont |
pt |
morphology=libstemmer_pt |
|
| 罗马尼亚语 |
charset_table=non_cont |
ro |
morphology=libstemmer_ro |
|
| 俄语 |
charset_table=non_cont |
ru |
morphology=lemmatize_ru(单一词根形式);morphology=lemmatize_ru_all(所有词根形式);morphology=stem_ru(Porter 俄语词干提取器);morphology=stem_enru(Porter 英语和俄语词干提取器);morphology=libstemmer_ru(来自 libstemmer) |
|
| Santali |
需要手动指定 charset_table |
- |
- |
|
| Sindhi |
需要手动指定 charset_table |
- |
- |
|
| 斯洛伐克语 |
charset_table=non_cont |
sk |
- |
|
| 斯洛文尼亚语 |
charset_table=non_cont |
sl |
- |
|
| 索马里语 |
charset_table=non_cont |
so |
- |
|
| 南索托语 |
charset_table=non_cont |
st |
- |
|
| 西班牙语 |
charset_table=non_cont |
es |
morphology=libstemmer_es |
|
| 斯瓦希里语 |
charset_table=non_cont |
sw |
- |
|
| 瑞典语 |
charset_table=non_cont |
sv |
morphology=libstemmer_sv |
|
| Sylheti |
需要手动指定 charset_table |
- |
- |
|
| 泰米尔语 |
需要手动指定 charset_table |
- |
morphology=libstemmer_ta |
|
| 泰语 |
charset_table=thai |
th |
- |
|
| 土耳其语 |
charset_table=non_cont |
tr |
morphology=libstemmer_tr |
|
| 乌克兰语 |
charset_table=non_cont,U+0406->U+0456,U+0456,U+0407->U+0457,U+0457,U+0490->U+0491,U+0491 |
- |
morphology=lemmatize_uk(单一词根形式);morphology=lemmatize_uk_all(所有词根形式) |
覆盖 charset_table 以保留 і、ї 和 ґ |
| 越南语 |
charset_table=non_cont |
- |
- |
使用拉丁字母。默认情况下,越南语变音符号(ă、â、ê、ô、ơ、ư、đ 以及声调符号)会自动映射为对应的基础拉丁字符,因此无需额外配置,tiếng 可以匹配 tieng。 |
| 约鲁巴语 |
charset_table=non_cont |
yo |
- |
|
| 祖鲁语 |
charset_table=non_cont |
zu |
- |
|
默认的 non_cont 字符集会在形态学处理前把德语变音符号映射为对应的 ASCII 基础字母,并将 ß 映射为 s。如果要让德语 AOT 形态学直接接收这些字符,请在 non_cont 后面追加内置的 german 别名:
charset_table = non_cont, german
该别名会保留 ä、ö、ü 和 ß,并将它们的大写形式映射为小写,包括把 ẞ 映射为 ß。它只会更改分词器的字符映射;不会自动选择任何形态学模式。
| 形态学值 |
行为 |
lemmatize_de |
现有的德语 AOT 单词根行为 |
lemmatize_de_all |
现有的德语 AOT 全词根行为 |
lemmatize_de_v2 |
带 sharp s 规范化的单词根行为 |
lemmatize_de_v2_all |
带 sharp s 规范化的全词根行为 |
因此,v2 配置既要包含形态学值,也要包含保留德语字符的字符集,例如:
morphology = lemmatize_de_v2
charset_table = non_cont, german
v2 变体会在词典查找前将 ß 和 ẞ 规范化为 ss,并且也会将生成的词典词元中包含的 ß 规范化为 ss。使用 v2 后,Straße/Strasse/STRAẞE 以及 GUSSE/GÜSSE/GUß/GUSS 这类形式在普通整词搜索中是等价的。这也会刻意消除诸如 Maße 与 Masse 这类在普通全文匹配中的区别。
启用 index_exact_words=1 时,Manticore 还会保存形态学处理之前的分词结果。因此,像 MATCH('=straße') 和 MATCH('=strasse') 这样的精确词查询可以区分 ß 和 ss 形式。精确词仍然遵循 charset_table 的映射规则:例如启用 german 别名时,Straße 和 STRAẞE 的精确形式都会是 straße,因为大小写折叠先于形态学处理发生。
现有表如果继续使用 lemmatize_de 或 lemmatize_de_all,在 daemon 升级后无需任何操作。将现有表迁移到任一 v2 值会改变其生成的词项,因此在投入使用前,请重建普通表,或将所有文档重新回放到新的 RT 表中。对已填充的 RT 表更改形态学设置,或者使用 merge、attach 或 optimize,都不会转换已索引的词项。现有的 dictionary-settings 检查可能会在适用范围内拒绝 morphology 值不同的表之间执行 attach,但这并不是迁移机制。
两个 v2 值都使用与现有值相同的 de.pak;无需更新语言包。早于 v2 选项名称的 daemon 无法加载 v2 表,因此回退 v2 表时必须恢复或重建使用现有形态学值的表。保留 lemmatize_de 或 lemmatize_de_all 的表不受此限制影响。